/**
 * 
 */
package cn.ad.server.web.utils;

import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * @author Wu Chengjun
 *
 */
public final class HttpUtils {

	/**
	 * 
	 */
	public HttpUtils() {
	}

	/**
	 * 获取Servlet请求路劲中的参数, 例如 http://localhost/serlet/channelID/1 参数值紧跟参数名后以/分隔
	 * 
	 * @param servlePath
	 * @param paramName
	 * @return
	 */
	public static String getPathParam(String servletPath, String paramName) {
		StringBuilder sb = new StringBuilder();
		sb.append("/").append(paramName).append("/");
		String pathParam = sb.toString();
		int pPost = servletPath.indexOf(pathParam);
		if (pPost == -1) {
			return null;
		}

		String path = servletPath.substring(pPost);
		path = path.substring(pathParam.length());
		int sPos = path.indexOf("/");
		if (sPos != -1) {
			path = path.substring(0, sPos);
		}
		return StringUtils.isEmpty(path) ? null : path;
	}

	/**
	 * 从url的请求字符串终获取参数列表，
	 * 
	 * @param paramString
	 *            参数字符串 参与与参数值之间以=分隔， 多个参数之间以&分隔， 不支持一个参数多个值的情况，例如
	 *            param1=value1&param2=value2&param3=value3
	 * @return
	 */
	public static Map<String, String> getParamsMap(String paramString) {
		if (StringUtils.isEmpty(paramString)) {
			return null;
		}
		Map<String, String> map = new HashMap<>();
		String[] array = paramString.split("&");
		if (ArrayUtils.isEmpty(array)) {
			return null;
		}

		for (String a : array) {
			String[] m = a.split("=");
			if (m.length > 0) {
				map.put(m[0], m.length > 1 ? m[1] : null);
			}
		}
		return map;
	}

	/**
	 * 获取域名。 获取http://xxx.cn/aa/bb中 xxx.cn值。
	 * 
	 * @param targetUrl
	 * @return
	 */
	public static String getUrlDomain(String targetUrl) {
		int startIndex = targetUrl.indexOf("//");
		if (startIndex == -1) {
			return "";
		}
		int endIndex = targetUrl.indexOf("/", startIndex + 2);
		if (endIndex == -1 || endIndex == (startIndex + 2)) {
			return "";
		}
		String targetUrlPrefix = targetUrl.substring(startIndex + 2, endIndex);
		return targetUrlPrefix;
	}

}
